package com.lz.autotest.common.utils;

import com.google.common.collect.Lists;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.function.Consumer;

/**
 * @author: X
 * @date: Created in 2023/4/18 15:07
 * @Description:
 */
public class SliceHelper {
    /**
     * 数据库Batch操作
     *
     * @param list      操作对象列表
     * @param batchSize 多少条操作为一批
     * @param session   句柄
     * @param consumer  具体处理方法
     */
    public static <T> void batchExecute(List<T> list, int batchSize, SqlSession session, Consumer<T> consumer)
            throws Exception {
        // 按batchSize进行分批
        List<List<T>> partitions = Lists.partition(list, batchSize);

        // 打包每批语句一起执行
        for (List<T> partition : partitions) {
            for (T part : partition) {
                consumer.accept(part);
            }
            session.commit();
        }
    }

}
